package com.hmdp.common.lock;

/**
 * @author TJS
 * @Description
 * @create 2023/1/3 22:11
 */
public interface ILock {


    /**
     * 尝试获取锁
     * @param timeOutSec 锁持有的超时时间，过期后自动释放
     * @return true代表获取锁成功，false获取锁失败
     */
    Boolean tryLock(Long timeOutSec);

    /**
     * 释放锁
     */
    void unLock();


}
/**
 * setnx lock thread1  互斥地设置，如果该key已存在，返回false。但容易产生死锁，业务运行时，redis突然宕机，锁无法释放
 * 解决方法：设置超时时间   expire lock 10
 * 新的问题：setnx 和 expire不是原子性操作，在设置过期时间之前redis宕机，同样会引起死锁。
 * 解决方法: set lock thred1 NX EX 10
 *
 * 释放锁
 * del key
 */
